/* /web/static/src/js/services/session.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('web.session',function(require){"use strict";var Session=require('web.Session');var modules=odoo._modules;var session=new Session(undefined,undefined,{modules:modules,use_cors:false});session.is_bound=session.session_bind();return session;});; /* /web/static/src/js/public/public_env.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define("web.public_env",function(require){"use strict";const commonEnv=require("web.commonEnv");return commonEnv;});; /* /web/static/src/js/public/public_crash_manager.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('web.PublicCrashManager',function(require){"use strict";const core=require('web.core');const CrashManager=require('web.CrashManager').CrashManager;const PublicCrashManager=CrashManager.extend({_displayWarning(message,title,options){this.displayNotification(Object.assign({},options,{title,message,sticky:true,}));},});core.serviceRegistry.add('crash_manager',PublicCrashManager);return{CrashManager:PublicCrashManager,};});; /* /web/static/src/js/public/public_notification.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('web.public.Notification',function(require){'use strict';var Notification=require('web.Notification');Notification.include({xmlDependencies:['/web/static/src/xml/notification.xml'],});});; /* /web/static/src/js/public/public_root.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('web.public.root',function(require){'use strict';var ajax=require('web.ajax');var dom=require('web.dom');const env=require('web.public_env');var session=require('web.session');var utils=require('web.utils');var publicWidget=require('web.public.widget');var publicRootRegistry=new publicWidget.RootWidgetRegistry();function getLang(){var html=document.documentElement;return(html.getAttribute('lang')||'en_US').replace('-','_');} var lang=utils.get_cookie('frontend_lang')||getLang();var localeDef=ajax.loadJS('/web/webclient/locale/'+lang.replace('-','_'));var PublicRoot=publicWidget.RootWidget.extend({events:_.extend({},publicWidget.RootWidget.prototype.events||{},{'submit .js_website_submit_form':'_onWebsiteFormSubmit','click .js_disable_on_click':'_onDisableOnClick',}),custom_events:_.extend({},publicWidget.RootWidget.prototype.custom_events||{},{call_service:'_onCallService',context_get:'_onContextGet',main_object_request:'_onMainObjectRequest',widgets_start_request:'_onWidgetsStartRequest',widgets_stop_request:'_onWidgetsStopRequest',}),init:function(){this._super.apply(this,arguments);this.env=env;this.publicWidgets=[];},willStart:function(){return Promise.all([this._super.apply(this,arguments),session.is_bound,localeDef]);},start:function(){var defs=[this._super.apply(this,arguments),this._startWidgets()];this.$(".o_image[data-mimetype^='image']").each(function(){var $img=$(this);if(/gif|jpe|jpg|png/.test($img.data('mimetype'))&&$img.data('src')){$img.css('background-image',"url('"+$img.data('src')+"')");}});if(window.location.hash.indexOf("scrollTop=")>-1){this.el.scrollTop=+window.location.hash.match(/scrollTop=([0-9]+)/)[1];} if($.fn.placeholder){$('input, textarea').placeholder();} this.$el.children().on('error.datetimepicker',this._onDateTimePickerError.bind(this));return Promise.all(defs);},_getContext:function(context){return _.extend({'lang':getLang(),},context||{});},_getExtraContext:function(context){return this._getContext(context);},_getPublicWidgetsRegistry:function(options){return publicWidget.registry;},_getRegistry:function(){return publicRootRegistry;},_startWidgets:function($from,options){var self=this;if($from===undefined){$from=this.$('#wrapwrap');if(!$from.length){$from=this.$el;}} if(options===undefined){options={};} this._stopWidgets($from);var defs=_.map(this._getPublicWidgetsRegistry(options),function(PublicWidget){var selector=PublicWidget.prototype.selector||'';var $target=dom.cssFind($from,selector,true);var defs=_.map($target,function(el){var widget=new PublicWidget(self,options);self.publicWidgets.push(widget);return widget.attachTo($(el));});return Promise.all(defs);});return Promise.all(defs);},_stopWidgets:function($from){var removedWidgets=_.map(this.publicWidgets,function(widget){if(!$from||$from.filter(widget.el).length||$from.find(widget.el).length){widget.destroy();return widget;} return null;});this.publicWidgets=_.difference(this.publicWidgets,removedWidgets);},_onCallService:function(ev){function _computeContext(context,noContextKeys){context=_.extend({},this._getContext(),context);if(noContextKeys){context=_.omit(context,noContextKeys);} return JSON.parse(JSON.stringify(context));} const payload=ev.data;let args=payload.args||[];if(payload.service==='ajax'&&payload.method==='rpc'){args=args.concat(ev.target);var route=args[0];if(_.str.startsWith(route,'/web/dataset/call_kw/')){var params=args[1];var options=args[2];var noContextKeys;if(options){noContextKeys=options.noContextKeys;args[2]=_.omit(options,'noContextKeys');} params.kwargs.context=_computeContext.call(this,params.kwargs.context,noContextKeys);}}else if(payload.service==='ajax'&&payload.method==='loadLibs'){args[1]=_computeContext.call(this,args[1]);} const service=this.env.services[payload.service];const result=service[payload.method].apply(service,args);payload.callback(result);},_onContextGet:function(ev){if(ev.data.extra){ev.data.callback(this._getExtraContext(ev.data.context));}else{ev.data.callback(this._getContext(ev.data.context));}},_onMainObjectRequest:function(ev){var repr=$('html').data('main-object');var m=repr.match(/(.+)\((\d+),(.*)\)/);ev.data.callback({model:m[1],id:m[2]|0,});},_onWidgetsStartRequest:function(ev){this._startWidgets(ev.data.$target,ev.data.options).then(ev.data.onSuccess).guardedCatch(ev.data.onFailure);},_onWidgetsStopRequest:function(ev){this._stopWidgets(ev.data.$target);},_onWebsiteFormSubmit:function(ev){var $buttons=$(ev.currentTarget).find('button[type="submit"], a.a-submit');_.each($buttons,function(btn){var $btn=$(btn);$btn.html(' '+$btn.text());$btn.prop('disabled',true);});},_onDisableOnClick:function(ev){$(ev.currentTarget).addClass('disabled');},_onDateTimePickerError:function(ev){return false;},});return{PublicRoot:PublicRoot,publicRootRegistry:publicRootRegistry,};});; /* /website/static/src/js/content/website_root_instance.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('root.widget',function(require){'use strict';const AbstractService=require('web.AbstractService');const env=require('web.public_env');var lazyloader=require('web.public.lazyloader');var websiteRootData=require('website.root');owl.config.mode=env.isDebug()?"dev":"prod";owl.Component.env=env;AbstractService.prototype.deployServices(env);var websiteRoot=new websiteRootData.WebsiteRoot(null);return lazyloader.allScriptsLoaded.then(function(){return websiteRoot.attachTo(document.body).then(function(){return websiteRoot;});});});; /* /web/static/src/js/public/public_widget.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('web.public.widget',function(require){'use strict';var Class=require('web.Class');var dom=require('web.dom');var mixins=require('web.mixins');var session=require('web.session');var Widget=require('web.Widget');var RootWidget=Widget.extend({custom_events:_.extend({},Widget.prototype.custom_events||{},{'registry_update':'_onRegistryUpdate','get_session':'_onGetSession',}),init:function(){this._super.apply(this,arguments);this._widgets=[];this._listenToUpdates=false;this._getRegistry().setParent(this);},start:function(){var defs=[this._super.apply(this,arguments)];defs.push(this._attachComponents());this._listenToUpdates=true;return Promise.all(defs);},_attachComponent:function(childInfo,$from){var self=this;var $elements=dom.cssFind($from||this.$el,childInfo.selector);var defs=_.map($elements,function(element){var w=new childInfo.Widget(self);self._widgets.push(w);return w.attachTo(element);});return Promise.all(defs);},_attachComponents:function($from){var self=this;var childInfos=this._getRegistry().get();var defs=_.map(childInfos,function(childInfo){return self._attachComponent(childInfo,$from);});return Promise.all(defs);},_getRegistry:function(){},_onGetSession:function(event){if(event.data.callback){event.data.callback(session);}},_onRegistryUpdate:function(ev){ev.stopPropagation();if(this._listenToUpdates){this._attachComponent(ev.data);}},});var RootWidgetRegistry=Class.extend(mixins.EventDispatcherMixin,{init:function(){mixins.EventDispatcherMixin.init.call(this);this._registry=[];},add:function(Widget,selector){var registryInfo={Widget:Widget,selector:selector,};this._registry.push(registryInfo);this.trigger_up('registry_update',registryInfo);},get:function(){return this._registry;},});var PublicWidget=Widget.extend({selector:false,events:{},init:function(parent,options){this._super.apply(this,arguments);this.options=options||{};},destroy:function(){if(this.selector){var $oldel=this.$el;this.setElement(null);} this._super.apply(this,arguments);if(this.selector){this.$el=$oldel;this.el=$oldel[0];this.$target=this.$el;this.target=this.el;}},setElement:function(){this._super.apply(this,arguments);if(this.selector){this.$target=this.$el;this.target=this.el;}},_delegateEvents:function(){var self=this;var originalEvents=this.events;var events={};_.each(this.events,function(method,event){if(typeof method!=='string'){events[event]=method;return;} var methodOptions=method.split(' ');if(methodOptions.length<=1){events[event]=method;return;} var isAsync=_.contains(methodOptions,'async');if(!isAsync){events[event]=method;return;} method=self.proxy(methodOptions[methodOptions.length-1]);if(_.str.startsWith(event,'click')){method=dom.makeButtonHandler(method);}else{method=dom.makeAsyncHandler(method);} events[event]=method;});this.events=events;this._super.apply(this,arguments);this.events=originalEvents;},_getContext:function(extra,extraContext){var context;this.trigger_up('context_get',{extra:extra||false,context:extraContext,callback:function(ctx){context=ctx;},});return context;},});var registry={};registry._fixAppleCollapse=PublicWidget.extend({selector:'div[data-toggle="collapse"]',events:{'click':function(){},},});return{RootWidget:RootWidget,RootWidgetRegistry:RootWidgetRegistry,Widget:PublicWidget,registry:registry,};});; /* /web_editor/static/src/js/frontend/loader.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('web_editor.loader',function(require){'use strict';var Wysiwyg=require('web_editor.wysiwyg.root');function load(parent,textarea,options){var loading=textarea.nextElementSibling;if(loading&&!loading.classList.contains('o_wysiwyg_loading')){loading=null;} if(!textarea.value.match(/\S/)){textarea.value='


';} var wysiwyg=new Wysiwyg(parent,options);return wysiwyg.attachTo(textarea).then(()=>{if(loading){loading.parentNode.removeChild(loading);} return wysiwyg;});} return{load:load,};});; /* /portal/static/src/js/portal.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('portal.portal',function(require){'use strict';var publicWidget=require('web.public.widget');const Dialog=require('web.Dialog');const{_t,qweb}=require('web.core');const ajax=require('web.ajax');publicWidget.registry.portalDetails=publicWidget.Widget.extend({selector:'.o_portal_details',events:{'change select[name="country_id"]':'_onCountryChange',},start:function(){var def=this._super.apply(this,arguments);this.$state=this.$('select[name="state_id"]');this.$stateOptions=this.$state.filter(':enabled').find('option:not(:first)');this._adaptAddressForm();return def;},_adaptAddressForm:function(){var $country=this.$('select[name="country_id"]');var countryID=($country.val()||0);this.$stateOptions.detach();var $displayedState=this.$stateOptions.filter('[data-country_id='+countryID+']');var nb=$displayedState.appendTo(this.$state).show().length;this.$state.parent().toggle(nb>=1);},_onCountryChange:function(){this._adaptAddressForm();},});publicWidget.registry.PortalHomeCounters=publicWidget.Widget.extend({selector:'.o_portal_my_home',start:function(){var def=this._super.apply(this,arguments);this._updateCounters();return def;},async _updateCounters(elem){const numberRpc=3;const needed=this.$('[data-placeholder_count]').map((i,o)=>$(o).data('placeholder_count')).toArray();const counterByRpc=Math.ceil(needed.length/numberRpc);const proms=[...Array(Math.min(numberRpc,needed.length)).keys()].map(async i=>{await this._rpc({route:"/my/counters",params:{counters:needed.slice(i*counterByRpc,(i+1)*counterByRpc)},}).then(data=>{Object.keys(data).map(k=>this.$("[data-placeholder_count='"+k+"']").text(data[k]));});});return Promise.all(proms);},});publicWidget.registry.portalSearchPanel=publicWidget.Widget.extend({selector:'.o_portal_search_panel',events:{'click .search-submit':'_onSearchSubmitClick','click .dropdown-item':'_onDropdownItemClick','keyup input[name="search"]':'_onSearchInputKeyup',},start:function(){var def=this._super.apply(this,arguments);this._adaptSearchLabel(this.$('.dropdown-item.active'));return def;},_adaptSearchLabel:function(elem){var $label=$(elem).clone();$label.find('span.nolabel').remove();this.$('input[name="search"]').attr('placeholder',$label.text().trim());},_search:function(){var search=$.deparam(window.location.search.substring(1));search['search_in']=this.$('.dropdown-item.active').attr('href').replace('#','');search['search']=this.$('input[name="search"]').val();window.location.search=$.param(search);},_onSearchSubmitClick:function(){this._search();},_onDropdownItemClick:function(ev){ev.preventDefault();var $item=$(ev.currentTarget);$item.closest('.dropdown-menu').find('.dropdown-item').removeClass('active');$item.addClass('active');this._adaptSearchLabel(ev.currentTarget);},_onSearchInputKeyup:function(ev){if(ev.keyCode===$.ui.keyCode.ENTER){this._search();}},});function handleCheckIdentity(rpc,wrapped){return wrapped.then((r)=>{if(!_.isMatch(r,{type:'ir.actions.act_window',res_model:'res.users.identitycheck'})){return r;} const check_id=r.res_id;return ajax.loadXML('/portal/static/src/xml/portal_security.xml',qweb).then(()=>new Promise((resolve,reject)=>{const d=new Dialog(null,{title:_t("Security Control"),$content:qweb.render('portal.identitycheck'),buttons:[{text:_t("Confirm Password"),classes:'btn btn-primary',click(){const password_input=this.el.querySelector('[name=password]');if(!password_input.reportValidity()){password_input.classList.add('is-invalid');return;} return rpc({model:'res.users.identitycheck',method:'write',args:[check_id,{password:password_input.value}]}).then(()=>rpc({model:'res.users.identitycheck',method:'run_check',args:[check_id]})).then((r)=>{this.close();resolve(r);},(err)=>{err.event.preventDefault();password_input.classList.add('is-invalid');password_input.setCustomValidity(_t("Check failed"));password_input.reportValidity();});}},{text:_t('Cancel'),close:true},{text:_t('Forgot password?'),classes:'btn btn-link',click(){window.location.href="/web/reset_password/";}}]}).on('close',null,()=>{reject();});d.opened(()=>{const pw=d.el.querySelector('[name="password"]');pw.focus();pw.addEventListener('input',()=>{pw.classList.remove('is-invalid');pw.setCustomValidity('');});d.el.addEventListener('submit',(e)=>{e.preventDefault();d.$footer.find('.btn-primary').click();});});d.open();}));});} return{handleCheckIdentity,}});; /* /portal/static/src/js/portal_chatter.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('portal.chatter',function(require){'use strict';var core=require('web.core');const dom=require('web.dom');var publicWidget=require('web.public.widget');var time=require('web.time');var portalComposer=require('portal.composer');var qweb=core.qweb;var _t=core._t;var PortalChatter=publicWidget.Widget.extend({template:'portal.Chatter',xmlDependencies:['/portal/static/src/xml/portal_chatter.xml'],events:{'click .o_portal_chatter_pager_btn':'_onClickPager','click .o_portal_chatter_js_is_internal':'async _onClickUpdateIsInternal',},init:function(parent,options){var self=this;this.options={};this._super.apply(this,arguments);_.each(options,function(val,key){self.options[_.str.underscored(key)]=val;});this.options=_.defaults(this.options,{'allow_composer':true,'display_composer':false,'csrf_token':odoo.csrf_token,'message_count':0,'pager_step':10,'pager_scope':5,'pager_start':1,'is_user_public':true,'is_user_employee':false,'is_user_publisher':false,'hash':false,'pid':false,'domain':[],});this.set('messages',[]);this.set('message_count',this.options['message_count']);this.set('pager',{});this.set('domain',this.options['domain']);this._currentPage=this.options['pager_start'];},willStart:function(){return Promise.all([this._super.apply(this,arguments),this._chatterInit()]);},start:function(){this.on("change:messages",this,this._renderMessages);this.on("change:message_count",this,function(){this._renderMessageCount();this.set('pager',this._pager(this._currentPage));});this.on("change:pager",this,this._renderPager);this.on("change:domain",this,this._onChangeDomain);this.set('message_count',this.options['message_count']);this.set('messages',this.preprocessMessages(this.result['messages']));var defs=[];defs.push(this._super.apply(this,arguments));if(this.options['display_composer']){this._composer=new portalComposer.PortalComposer(this,this.options);defs.push(this._composer.replace(this.$('.o_portal_chatter_composer')));} return Promise.all(defs);},messageFetch:function(domain){var self=this;return this._rpc({route:'/mail/chatter_fetch',params:self._messageFetchPrepareParams(),}).then(function(result){self.set('messages',self.preprocessMessages(result['messages']));self.set('message_count',result['message_count']);});},preprocessMessages:function(messages){_.each(messages,function(m){m['author_avatar_url']=_.str.sprintf('/web/image/%s/%s/author_avatar/50x50','mail.message',m.id);m['published_date_str']=_.str.sprintf(_t('Published on %s'),moment(time.str_to_datetime(m.date)).format('MMMM Do YYYY, h:mm:ss a'));});return messages;},_chatterInit:function(){var self=this;return this._rpc({route:'/mail/chatter_init',params:this._messageFetchPrepareParams()}).then(function(result){self.result=result;self.options=_.extend(self.options,self.result['options']||{});return result;});},_changeCurrentPage:function(page,domain){this._currentPage=page;var d=domain?domain:_.clone(this.get('domain'));this.set('domain',d);},_messageFetchPrepareParams:function(){var self=this;var data={'res_model':this.options['res_model'],'res_id':this.options['res_id'],'limit':this.options['pager_step'],'offset':(this._currentPage-1)*this.options['pager_step'],'allow_composer':this.options['allow_composer'],};if(self.options['token']){data['token']=self.options['token'];} if(this.get('domain')){data['domain']=this.get('domain');} return data;},_pager:function(page){page=page||1;var total=this.get('message_count');var scope=this.options['pager_scope'];var step=this.options['pager_step'];var pageCount=Math.ceil(parseFloat(total)/step);page=Math.max(1,Math.min(parseInt(page),pageCount));scope-=1;var pmin=Math.max(page-parseInt(Math.floor(scope/2)),1);var pmax=Math.min(pmin+scope,pageCount);if(pmax-scope>0){pmin=pmax-scope;}else{pmin=1;} var pages=[];_.each(_.range(pmin,pmax+1),function(index){pages.push(index);});return{"page_count":pageCount,"offset":(page-1)*step,"page":page,"page_start":pmin,"page_previous":Math.max(pmin,page-1),"page_next":Math.min(pmax,page+1),"page_end":pmax,"pages":pages};},_renderMessages:function(){this.$('.o_portal_chatter_messages').html(qweb.render("portal.chatter_messages",{widget:this}));},_renderMessageCount:function(){this.$('.o_message_counter').replaceWith(qweb.render("portal.chatter_message_count",{widget:this}));},_renderPager:function(){this.$('.o_portal_chatter_pager').replaceWith(qweb.render("portal.pager",{widget:this}));},_onChangeDomain:function(){var self=this;this.messageFetch().then(function(){var p=self._currentPage;self.set('pager',self._pager(p));});},_onClickPager:function(ev){ev.preventDefault();var page=$(ev.currentTarget).data('page');this._changeCurrentPage(page);},_onClickUpdateIsInternal:function(ev){ev.preventDefault();var $elem=$(ev.currentTarget);return this._rpc({route:'/mail/update_is_internal',params:{message_id:$elem.data('message-id'),is_internal:!$elem.data('is-internal'),},}).then(function(result){$elem.data('is-internal',result);if(result===true){$elem.addClass('o_portal_message_internal_on');$elem.removeClass('o_portal_message_internal_off');}else{$elem.addClass('o_portal_message_internal_off');$elem.removeClass('o_portal_message_internal_on');}});},});publicWidget.registry.portalChatter=publicWidget.Widget.extend({selector:'.o_portal_chatter',async start(){const proms=[this._super.apply(this,arguments)];const chatter=new PortalChatter(this,this.$el.data());proms.push(chatter.appendTo(this.$el));await Promise.all(proms);if(window.location.hash===`#${this.el.id}`){dom.scrollTo(this.el,{duration:0});}},});return{PortalChatter:PortalChatter,};});; /* /portal/static/src/js/portal_composer.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('portal.composer',function(require){'use strict';var ajax=require('web.ajax');var core=require('web.core');var publicWidget=require('web.public.widget');var qweb=core.qweb;var _t=core._t;var PortalComposer=publicWidget.Widget.extend({template:'portal.Composer',xmlDependencies:['/portal/static/src/xml/portal_chatter.xml'],events:{'change .o_portal_chatter_file_input':'_onFileInputChange','click .o_portal_chatter_attachment_btn':'_onAttachmentButtonClick','click .o_portal_chatter_attachment_delete':'async _onAttachmentDeleteClick','click .o_portal_chatter_composer_btn':'async _onSubmitButtonClick',},init:function(parent,options){this._super.apply(this,arguments);this.options=_.defaults(options||{},{'allow_composer':true,'display_composer':false,'csrf_token':odoo.csrf_token,'token':false,'res_model':false,'res_id':false,});this.attachments=[];},start:function(){var self=this;this.$attachmentButton=this.$('.o_portal_chatter_attachment_btn');this.$fileInput=this.$('.o_portal_chatter_file_input');this.$sendButton=this.$('.o_portal_chatter_composer_btn');this.$attachments=this.$('.o_portal_chatter_composer_form .o_portal_chatter_attachments');this.$attachmentIds=this.$('.o_portal_chatter_attachment_ids');this.$attachmentTokens=this.$('.o_portal_chatter_attachment_tokens');return this._super.apply(this,arguments).then(function(){if(self.options.default_attachment_ids){self.attachments=self.options.default_attachment_ids||[];_.each(self.attachments,function(attachment){attachment.state='done';});self._updateAttachments();} return Promise.resolve();});},_onAttachmentButtonClick:function(){this.$fileInput.click();},_onAttachmentDeleteClick:function(ev){var self=this;var attachmentId=$(ev.currentTarget).closest('.o_portal_chatter_attachment').data('id');var accessToken=_.find(this.attachments,{'id':attachmentId}).access_token;ev.preventDefault();ev.stopPropagation();this.$sendButton.prop('disabled',true);return this._rpc({route:'/portal/attachment/remove',params:{'attachment_id':attachmentId,'access_token':accessToken,},}).then(function(){self.attachments=_.reject(self.attachments,{'id':attachmentId});self._updateAttachments();self.$sendButton.prop('disabled',false);});},_onFileInputChange:function(){var self=this;this.$sendButton.prop('disabled',true);return Promise.all(_.map(this.$fileInput[0].files,function(file){return new Promise(function(resolve,reject){var data={'name':file.name,'file':file,'res_id':self.options.res_id,'res_model':self.options.res_model,'access_token':self.options.token,};ajax.post('/portal/attachment/add',data).then(function(attachment){attachment.state='pending';self.attachments.push(attachment);self._updateAttachments();resolve();}).guardedCatch(function(error){self.displayNotification({message:_.str.sprintf(_t("Could not save file %s"),_.escape(file.name)),type:'warning',sticky:true,});resolve();});});})).then(function(){self.$fileInput[0].value=null;self.$sendButton.prop('disabled',false);});},_onSubmitButtonClick:function(){return new Promise(function(resolve,reject){});},_updateAttachments:function(){this.$attachmentIds.val(_.pluck(this.attachments,'id'));this.$attachmentTokens.val(_.pluck(this.attachments,'access_token'));this.$attachments.html(qweb.render('portal.Chatter.Attachments',{attachments:this.attachments,showDelete:true,}));},});return{PortalComposer:PortalComposer,};});; /* /portal/static/src/js/portal_signature.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('portal.signature_form',function(require){'use strict';var core=require('web.core');var publicWidget=require('web.public.widget');var NameAndSignature=require('web.name_and_signature').NameAndSignature;var qweb=core.qweb;var _t=core._t;var SignatureForm=publicWidget.Widget.extend({template:'portal.portal_signature',xmlDependencies:['/portal/static/src/xml/portal_signature.xml'],events:{'click .o_portal_sign_submit':'async _onClickSignSubmit',},custom_events:{'signature_changed':'_onChangeSignature',},init:function(parent,options){this._super.apply(this,arguments);this.csrf_token=odoo.csrf_token;this.callUrl=options.callUrl||'';this.rpcParams=options.rpcParams||{};this.sendLabel=options.sendLabel||_t("Accept & Sign");this.nameAndSignature=new NameAndSignature(this,options.nameAndSignatureOptions||{});},start:function(){var self=this;this.$confirm_btn=this.$('.o_portal_sign_submit');this.$controls=this.$('.o_portal_sign_controls');var subWidgetStart=this.nameAndSignature.replace(this.$('.o_web_sign_name_and_signature'));return Promise.all([subWidgetStart,this._super.apply(this,arguments)]).then(function(){self.nameAndSignature.resetSignature();});},focusName:function(){this.nameAndSignature.focusName();},resetSignature:function(){return this.nameAndSignature.resetSignature();},_onClickSignSubmit:function(ev){var self=this;ev.preventDefault();if(!this.nameAndSignature.validateSignature()){return;} var name=this.nameAndSignature.getName();var signature=this.nameAndSignature.getSignatureImage()[1];return this._rpc({route:this.callUrl,params:_.extend(this.rpcParams,{'name':name,'signature':signature,}),}).then(function(data){if(data.error){self.$('.o_portal_sign_error_msg').remove();self.$controls.prepend(qweb.render('portal.portal_signature_error',{widget:data}));}else if(data.success){var $success=qweb.render('portal.portal_signature_success',{widget:data});self.$el.empty().append($success);} if(data.force_refresh){if(data.redirect_url){window.location=data.redirect_url;}else{window.location.reload();} return new Promise(function(){});}});},_onChangeSignature:function(){var isEmpty=this.nameAndSignature.isSignatureEmpty();this.$confirm_btn.prop('disabled',isEmpty);},});publicWidget.registry.SignatureForm=publicWidget.Widget.extend({selector:'.o_portal_signature_form',start:function(){var hasBeenReset=false;var callUrl=this.$el.data('call-url');var nameAndSignatureOptions={defaultName:this.$el.data('default-name'),mode:this.$el.data('mode'),displaySignatureRatio:this.$el.data('signature-ratio'),signatureType:this.$el.data('signature-type'),fontColor:this.$el.data('font-color')||'black',};var sendLabel=this.$el.data('send-label');var form=new SignatureForm(this,{callUrl:callUrl,nameAndSignatureOptions:nameAndSignatureOptions,sendLabel:sendLabel,});this.$el.closest('.modal').on('shown.bs.modal',function(ev){if(!hasBeenReset){hasBeenReset=true;form.resetSignature();}else{form.focusName();}});return Promise.all([this._super.apply(this,arguments),form.appendTo(this.$el)]);},});return{SignatureForm:SignatureForm,};});; /* /portal/static/src/js/portal_sidebar.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('portal.PortalSidebar',function(require){'use strict';var core=require('web.core');var publicWidget=require('web.public.widget');var time=require('web.time');var session=require('web.session');var _t=core._t;var PortalSidebar=publicWidget.Widget.extend({start:function(){this._setDelayLabel();return this._super.apply(this,arguments);},_setDelayLabel:function(){var $sidebarTimeago=this.$el.find('.o_portal_sidebar_timeago');_.each($sidebarTimeago,function(el){var dateTime=moment(time.auto_str_to_date($(el).attr('datetime'))),today=moment().startOf('day'),diff=dateTime.diff(today,'days',true),displayStr;session.is_bound.then(function(){if(diff===0){displayStr=_t('Due today');}else if(diff>0){displayStr=_.str.sprintf(_t('Due in %1d days'),Math.abs(diff));}else{displayStr=_.str.sprintf(_t('%1d days overdue'),Math.abs(diff));} $(el).text(displayStr);});});},_printIframeContent:function(href){if($.browser.mozilla){window.open(href,'_blank');return;} if(!this.printContent){this.printContent=$('');this.$el.append(this.printContent);this.printContent.on('load',function(){$(this).get(0).contentWindow.print();});}else{this.printContent.get(0).contentWindow.print();}},});return PortalSidebar;});; /* /auth_totp_portal/static/src/js/totp_frontend.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('auth_totp_portal.button',function(require){'use strict';const{_t}=require('web.core');const publicWidget=require('web.public.widget');const Dialog=require('web.Dialog');const{handleCheckIdentity}=require('portal.portal');function fromField(f,record){switch(f.getAttribute('name')){case'qrcode':const qrcode=document.createElement('img');qrcode.setAttribute('class','img img-fluid offset-1');qrcode.setAttribute('src','data:image/png;base64,'+record['qrcode']);return qrcode;case'url':const url=document.createElement('a');url.setAttribute('href',record['url']);url.textContent=f.getAttribute('text')||record['url'];return url;case'code':const code=document.createElement('input');code.setAttribute('name','code');code.setAttribute('class','form-control col-10 col-md-6');code.setAttribute('placeholder','6-digit code');code.required=true;code.maxLength=6;code.minLength=6;return code;default:return document.createTextNode(record[f.getAttribute('name')]||'');}} function fixupViewBody(oldNode,record){let qrcode=null,code=null,node=null;switch(oldNode.nodeType){case 1:if(oldNode.tagName==='field'){node=fromField(oldNode,record);switch(oldNode.getAttribute('name')){case'qrcode':qrcode=node;break;case'code':code=node;break} break;} node=document.createElement(oldNode.tagName);for(let i=0;iar[0]);const doc=new DOMParser().parseFromString(document.getElementById('totp_wizard_view').textContent,'application/xhtml+xml');const xmlBody=doc.querySelector('sheet *');const[body,,codeInput]=fixupViewBody(xmlBody,record);codeInput.addEventListener('input',()=>codeInput.setCustomValidity(''));const buttons=[];for(const button of doc.querySelectorAll('footer button')){buttons.push(new Button(this,model,record.id,codeInput,button));} const $content=document.createElement('form');$content.appendChild(body);$content.addEventListener('submit',(e)=>{e.preventDefault();dialog.$footer.find('.btn-primary').click();});var dialog=new Dialog(this,{$content,buttons}).open();}});publicWidget.registry.DisableTOTPButton=publicWidget.Widget.extend({selector:'#auth_totp_portal_disable',events:{click:'_onClick'},async _onClick(e){e.preventDefault();await handleCheckIdentity(this.proxy('_rpc'),this._rpc({model:'res.users',method:'totp_disable',args:[this.getSession().user_id]})) window.location=window.location;}});});; /* /website/static/src/js/set_view_track.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('website.set_view_track',function(require){"use strict";var CustomizeMenu=require('website.customizeMenu');var Widget=require('web.Widget');var TrackPage=Widget.extend({template:'website.track_page',xmlDependencies:['/website/static/src/xml/track_page.xml'],events:{'change #switch-track-page':'_onTrackChange',},start:function(){this.$input=this.$('#switch-track-page');this._isTracked().then((data)=>{if(data[0]['track']){this.track=true;this.$input.attr('checked','checked');}else{this.track=false;}});},_isTracked:function(val){var viewid=$('html').data('viewid');if(!viewid){return Promise.reject();}else{return this._rpc({model:'ir.ui.view',method:'read',args:[[viewid],['track']],});}},_onTrackChange:function(ev){var checkboxValue=this.$input.is(':checked');if(checkboxValue!==this.track){this.track=checkboxValue;this._trackPage(checkboxValue);}},_trackPage:function(val){var viewid=$('html').data('viewid');if(!viewid){return Promise.reject();}else{return this._rpc({model:'ir.ui.view',method:'write',args:[[viewid],{track:val}],});}},});CustomizeMenu.include({_loadCustomizeOptions:function(){var self=this;var def=this._super.apply(this,arguments);return def.then(function(){if(!self.__trackpageLoaded){self.__trackpageLoaded=true;self.trackPage=new TrackPage(self);self.trackPage.appendTo(self.$el.children('.dropdown-menu'));}});},});});; /* /website/static/src/js/utils.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('website.utils',function(require){'use strict';var ajax=require('web.ajax');var core=require('web.core');var qweb=core.qweb;function loadAnchors(url){return new Promise(function(resolve,reject){if(url===window.location.pathname||url[0]==='#'){resolve(document.body.outerHTML);}else if(url.length&&!url.startsWith("http")){$.get(window.location.origin+url).then(resolve,reject);}else{resolve();}}).then(function(response){return _.map($(response).find('[id][data-anchor=true]'),function(el){return'#'+el.id;});}).catch(error=>{console.debug(error);return[];});} function autocompleteWithPages(self,$input,options){$.widget("website.urlcomplete",$.ui.autocomplete,{options:options||{},_create:function(){this._super();this.widget().menu("option","items","> :not(.ui-autocomplete-category)");},_renderMenu:function(ul,items){const self=this;items.forEach(item=>{if(item.separator){self._renderSeparator(ul,item);} else{self._renderItem(ul,item);}});},_renderSeparator:function(ul,item){return $("
  • ").append(`
    ${item.separator}
    `).appendTo(ul);},_renderItem:function(ul,item){return $("
  • ").data('ui-autocomplete-item',item).append(`
    ${item.label}
    `).appendTo(ul);},});$input.urlcomplete({source:function(request,response){if(request.term[0]==='#'){loadAnchors(request.term).then(function(anchors){response(anchors);});}else if(request.term.startsWith('http')||request.term.length===0){response();}else{return self._rpc({route:'/website/get_suggested_links',params:{needle:request.term,limit:15,}}).then(function(res){let choices=res.matching_pages;res.others.forEach(other=>{if(other.values.length){choices=choices.concat([{separator:other.title}],other.values,);}});response(choices);});}},select:function(ev,ui){ev.target.value=ui.item.value;self.trigger_up('website_url_chosen');ev.preventDefault();},});} function onceAllImagesLoaded($element,$excluded){var defs=_.map($element.find('img').addBack('img'),function(img){if(img.complete||$excluded&&($excluded.is(img)||$excluded.has(img).length)){return;} var def=new Promise(function(resolve,reject){$(img).one('load',function(){resolve();});});return def;});return Promise.all(defs);} function prompt(options,_qweb){if(typeof options==='string'){options={text:options};} var xmlDef;if(_.isUndefined(_qweb)){_qweb='website.prompt';xmlDef=ajax.loadXML('/website/static/src/xml/website.xml',core.qweb);} options=_.extend({window_title:'',field_name:'','default':'',init:function(){},},options||{});var type=_.intersection(Object.keys(options),['input','textarea','select']);type=type.length?type[0]:'input';options.field_type=type;options.field_name=options.field_name||options[type];var def=new Promise(function(resolve,reject){Promise.resolve(xmlDef).then(function(){var dialog=$(qweb.render(_qweb,options)).appendTo('body');options.$dialog=dialog;var field=dialog.find(options.field_type).first();field.val(options['default']);field.fillWith=function(data){if(field.is('select')){var select=field[0];data.forEach(function(item){select.options[select.options.length]=new window.Option(item[1],item[0]);});}else{field.val(data);}};var init=options.init(field,dialog);Promise.resolve(init).then(function(fill){if(fill){field.fillWith(fill);} dialog.modal('show');field.focus();dialog.on('click','.btn-primary',function(){var backdrop=$('.modal-backdrop');resolve({val:field.val(),field:field,dialog:dialog});dialog.modal('hide').remove();backdrop.remove();});});dialog.on('hidden.bs.modal',function(){var backdrop=$('.modal-backdrop');reject();dialog.remove();backdrop.remove();});if(field.is('input[type="text"], select')){field.keypress(function(e){if(e.which===13){e.preventDefault();dialog.find('.btn-primary').trigger('click');}});}});});return def;} function websiteDomain(self){var websiteID;self.trigger_up('context_get',{callback:function(ctx){websiteID=ctx['website_id'];},});return['|',['website_id','=',false],['website_id','=',websiteID]];} function sendRequest(route,params){function _addInput(form,name,value){let param=document.createElement('input');param.setAttribute('type','hidden');param.setAttribute('name',name);param.setAttribute('value',value);form.appendChild(param);} let form=document.createElement('form');form.setAttribute('action',route);form.setAttribute('method',params.method||'POST');if(core.csrf_token){_addInput(form,'csrf_token',core.csrf_token);} for(const key in params){const value=params[key];if(Array.isArray(value)&&value.length){for(const val of value){_addInput(form,key,val);}}else{_addInput(form,key,value);}} document.body.appendChild(form);form.submit();} function removeLoader(){const $loader=$('#o_website_page_loader');if($loader){$loader.remove();}} return{loadAnchors:loadAnchors,autocompleteWithPages:autocompleteWithPages,onceAllImagesLoaded:onceAllImagesLoaded,prompt:prompt,sendRequest:sendRequest,websiteDomain:websiteDomain,removeLoader:removeLoader,};});; /* /website/static/src/js/content/website_root.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('website.root',function(require){'use strict';const ajax=require('web.ajax');const{_t}=require('web.core');var Dialog=require('web.Dialog');const KeyboardNavigationMixin=require('web.KeyboardNavigationMixin');const session=require('web.session');var publicRootData=require('web.public.root');require("web.zoomodoo");var websiteRootRegistry=publicRootData.publicRootRegistry;var WebsiteRoot=publicRootData.PublicRoot.extend(KeyboardNavigationMixin,{events:_.extend({},KeyboardNavigationMixin.events,publicRootData.PublicRoot.prototype.events||{},{'click .js_change_lang':'_onLangChangeClick','click .js_publish_management .js_publish_btn':'_onPublishBtnClick','click .js_multi_website_switch':'_onWebsiteSwitch','shown.bs.modal':'_onModalShown',}),custom_events:_.extend({},publicRootData.PublicRoot.prototype.custom_events||{},{'gmap_api_request':'_onGMapAPIRequest','gmap_api_key_request':'_onGMapAPIKeyRequest','ready_to_clean_for_save':'_onWidgetsStopRequest','seo_object_request':'_onSeoObjectRequest',}),init(){this.isFullscreen=false;KeyboardNavigationMixin.init.call(this,{autoAccessKeys:false,});return this._super(...arguments);},start:function(){KeyboardNavigationMixin.start.call(this);if(!this.$('.js_change_lang').length){var $links=this.$('.js_language_selector a:not([data-oe-id])');var m=$(_.min($links,function(l){return $(l).attr('href').length;})).attr('href');$links.each(function(){var $link=$(this);var t=$link.attr('href');var l=(t===m)?"default":t.split('/')[1];$link.data('lang',l).addClass('js_change_lang');});} this.$('.zoomable img[data-zoom]').zoomOdoo();return this._super.apply(this,arguments);},destroy(){KeyboardNavigationMixin.destroy.call(this);return this._super(...arguments);},_getContext:function(context){var html=document.documentElement;return _.extend({'website_id':html.getAttribute('data-website-id')|0,},this._super.apply(this,arguments));},_getExtraContext:function(context){var html=document.documentElement;return _.extend({'editable':!!(html.dataset.editable||$('[data-oe-model]').length),'translatable':!!html.dataset.translatable,'edit_translations':!!html.dataset.edit_translations,},this._super.apply(this,arguments));},async _getGMapAPIKey(refetch){if(refetch||!this._gmapAPIKeyProm){this._gmapAPIKeyProm=new Promise(async resolve=>{const data=await this._rpc({route:'/website/google_maps_api_key',});resolve(JSON.parse(data).google_maps_api_key||'');});} return this._gmapAPIKeyProm;},_getPublicWidgetsRegistry:function(options){var registry=this._super.apply(this,arguments);if(options.editableMode){return _.pick(registry,function(PublicWidget){return!PublicWidget.prototype.disabledInEditableMode;});} return registry;},async _loadGMapAPI(editableMode,refetch){if(refetch||!this._gmapAPILoading){this._gmapAPILoading=new Promise(async resolve=>{const key=await this._getGMapAPIKey(refetch);window.odoo_gmap_api_post_load=(async function odoo_gmap_api_post_load(){await this._startWidgets(undefined,{editableMode:editableMode});resolve(key);}).bind(this);if(!key){if(!editableMode&&session.is_admin){this.displayNotification({type:'warning',sticky:true,message:$('
    ').append($('',{text:_t("Cannot load google map.")}),$('
    '),$('',{href:"/web#action=website.action_website_configuration",text:_t("Check your configuration."),}),)[0].outerHTML,});} resolve(false);this._gmapAPILoading=false;return;} await ajax.loadJS(`https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=places&callback=odoo_gmap_api_post_load&key=${key}`);});} return this._gmapAPILoading;},_toggleFullscreen(state){this.isFullscreen=state;document.body.classList.add('o_fullscreen_transition');document.body.classList.toggle('o_fullscreen',this.isFullscreen);document.body.style.overflowX='hidden';let resizing=true;window.requestAnimationFrame(function resizeFunction(){window.dispatchEvent(new Event('resize'));if(resizing){window.requestAnimationFrame(resizeFunction);}});let stopResizing;const onTransitionEnd=ev=>{if(ev.target===document.body&&ev.propertyName==='padding-top'){stopResizing();}};stopResizing=()=>{resizing=false;document.body.style.overflowX='';document.body.removeEventListener('transitionend',onTransitionEnd);document.body.classList.remove('o_fullscreen_transition');};document.body.addEventListener('transitionend',onTransitionEnd);window.setTimeout(()=>stopResizing(),500);},_onWidgetsStartRequest:function(ev){ev.data.options=_.clone(ev.data.options||{});ev.data.options.editableMode=ev.data.editableMode;this._super.apply(this,arguments);},_onLangChangeClick:function(ev){ev.preventDefault();var $target=$(ev.currentTarget);var redirect={lang:$target.data('url_code'),url:encodeURIComponent($target.attr('href').replace(/[&?]edit_translations[^&?]+/,'')),hash:encodeURIComponent(window.location.hash)};window.location.href=_.str.sprintf("/website/lang/%(lang)s?r=%(url)s%(hash)s",redirect);},async _onGMapAPIRequest(ev){ev.stopPropagation();const apiKey=await this._loadGMapAPI(ev.data.editableMode,ev.data.refetch);ev.data.onSuccess(apiKey);},async _onGMapAPIKeyRequest(ev){ev.stopPropagation();const apiKey=await this._getGMapAPIKey(ev.data.refetch);ev.data.onSuccess(apiKey);},_onSeoObjectRequest:function(ev){var res=this._unslugHtmlDataObject('seo-object');ev.data.callback(res);},_unslugHtmlDataObject:function(dataAttr){var repr=$('html').data(dataAttr);var match=repr&&repr.match(/(.+)\((\d+),(.*)\)/);if(!match){return null;} return{model:match[1],id:match[2]|0,};},_onPublishBtnClick:function(ev){ev.preventDefault();if(document.body.classList.contains('editor_enable')){return;} var self=this;var $data=$(ev.currentTarget).parents(".js_publish_management:first");this._rpc({route:$data.data('controller')||'/website/publish',params:{id:+$data.data('id'),object:$data.data('object'),},}).then(function(result){$data.toggleClass("css_unpublished css_published");$data.find('input').prop("checked",result);$data.parents("[data-publish]").attr("data-publish",+result?'on':'off');if(result){self.displayNotification({type:'success',message:$data.data('description')?_.str.sprintf(_t("You've published your %s."),$data.data('description')):_t("Published with success."),});}});},_onWebsiteSwitch:function(ev){var websiteId=ev.currentTarget.getAttribute('website-id');var websiteDomain=ev.currentTarget.getAttribute('domain');let url=`/website/force/${websiteId}`;if(websiteDomain&&window.location.hostname!==websiteDomain){url=websiteDomain+url;} const path=window.location.pathname+window.location.search+window.location.hash;window.location.href=$.param.querystring(url,{'path':path});},_onModalShown:function(ev){$(ev.target).addClass('modal_shown');},_onKeyDown(ev){if(!session.user_id){return;} if(ev.keyCode!==$.ui.keyCode.ESCAPE||!document.body.contains(ev.target)||ev.target.closest('.modal')){return KeyboardNavigationMixin._onKeyDown.apply(this,arguments);} this._toggleFullscreen(!this.isFullscreen);},});return{WebsiteRoot:WebsiteRoot,websiteRootRegistry:websiteRootRegistry,};});; /* /website/static/src/js/content/compatibility.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('website.content.compatibility',function(require){'use strict';require('web.dom_ready');var browser=_.findKey($.browser,function(v){return v===true;});if($.browser.mozilla&&+$.browser.version.replace(/^([0-9]+\.[0-9]+).*/,'\$1')<20){browser='msie';} browser+=(','+$.browser.version);var mobileRegex=/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i;if(mobileRegex.test(window.navigator.userAgent.toLowerCase())){browser+=',mobile';} document.documentElement.setAttribute('data-browser',browser);var htmlStyle=document.documentElement.style;var isFlexSupported=(('flexWrap'in htmlStyle)||('WebkitFlexWrap'in htmlStyle)||('msFlexWrap'in htmlStyle));if(!isFlexSupported){document.documentElement.setAttribute('data-no-flex','');} return{browser:browser,isFlexSupported:isFlexSupported,};});; /* /website/static/src/js/content/menu.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('website.content.menu',function(require){'use strict';const config=require('web.config');var dom=require('web.dom');var publicWidget=require('web.public.widget');var wUtils=require('website.utils');var animations=require('website.content.snippets.animation');const extraMenuUpdateCallbacks=[];const BaseAnimatedHeader=animations.Animation.extend({disabledInEditableMode:false,effects:[{startEvents:'scroll',update:'_updateHeaderOnScroll',},{startEvents:'resize',update:'_updateHeaderOnResize',}],init:function(){this._super(...arguments);this.fixedHeader=false;this.scrolledPoint=0;this.hasScrolled=false;},start:function(){this.$main=this.$el.next('main');this.isOverlayHeader=!!this.$el.closest('.o_header_overlay, .o_header_overlay_theme').length;this.$dropdowns=this.$el.find('.dropdown, .dropdown-menu');this.$navbarCollapses=this.$el.find('.navbar-collapse');this.$navbarCollapses.on('show.bs.collapse.BaseAnimatedHeader',function(){if(config.device.size_class<=config.device.SIZES.SM){$(document.body).addClass('overflow-hidden');}}).on('hide.bs.collapse.BaseAnimatedHeader',function(){$(document.body).removeClass('overflow-hidden');});this._transitionCount=0;this.$el.on('odoo-transitionstart.BaseAnimatedHeader',()=>this._adaptToHeaderChangeLoop(1));this.$el.on('transitionend.BaseAnimatedHeader',()=>this._adaptToHeaderChangeLoop(-1));return this._super(...arguments);},destroy:function(){this._toggleFixedHeader(false);this.$el.removeClass('o_header_affixed o_header_is_scrolled o_header_no_transition');this.$navbarCollapses.off('.BaseAnimatedHeader');this.$el.off('.BaseAnimatedHeader');this._super(...arguments);},_adaptFixedHeaderPosition(){dom.compensateScrollbar(this.el,this.fixedHeader,false,'right');},_adaptToHeaderChange:function(){this._updateMainPaddingTop();this.el.classList.toggle('o_top_fixed_element',this.fixedHeader&&this._isShown());for(const callback of extraMenuUpdateCallbacks){callback();}},_adaptToHeaderChangeLoop:function(addCount=0){this._adaptToHeaderChange();this._transitionCount+=addCount;this._transitionCount=Math.max(0,this._transitionCount);if(this._transitionCount>0){window.requestAnimationFrame(()=>this._adaptToHeaderChangeLoop());if(addCount!==0){clearTimeout(this._changeLoopTimer);this._changeLoopTimer=setTimeout(()=>{this._adaptToHeaderChangeLoop(-this._transitionCount);},500);}}else{clearTimeout(this._changeLoopTimer);}},_computeTopGap(){return 0;},_isShown(){return true;},_toggleFixedHeader:function(useFixed=true){this.fixedHeader=useFixed;this._adaptToHeaderChange();this.el.classList.toggle('o_header_affixed',useFixed);this._adaptFixedHeaderPosition();},_updateMainPaddingTop:function(){this.headerHeight=this.$el.outerHeight();this.topGap=this._computeTopGap();if(this.isOverlayHeader){return;} this.$main.css('padding-top',this.fixedHeader?this.headerHeight:'');},_updateHeaderOnScroll:function(scroll){if(!this.hasScrolled){this.hasScrolled=true;if(scroll>0){this.$el.addClass('o_header_no_transition');}}else{this.$el.removeClass('o_header_no_transition');} const headerIsScrolled=(scroll>this.scrolledPoint);if(this.headerIsScrolled!==headerIsScrolled){this.el.classList.toggle('o_header_is_scrolled',headerIsScrolled);this.$el.trigger('odoo-transitionstart');this.headerIsScrolled=headerIsScrolled;} this.$dropdowns.removeClass('show');this.$navbarCollapses.removeClass('show').attr('aria-expanded',false);},_updateHeaderOnResize:function(){this._adaptFixedHeaderPosition();if(document.body.classList.contains('overflow-hidden')&&config.device.size_class>config.device.SIZES.SM){document.body.classList.remove('overflow-hidden');this.$el.find('.navbar-collapse').removeClass('show');}},});publicWidget.registry.StandardAffixedHeader=BaseAnimatedHeader.extend({selector:'header.o_header_standard:not(.o_header_sidebar)',init:function(){this._super(...arguments);this.fixedHeaderShow=false;this.scrolledPoint=300;},start:function(){this.headerHeight=this.$el.outerHeight();return this._super.apply(this,arguments);},_isShown(){return!this.fixedHeader||this.fixedHeaderShow;},_updateHeaderOnScroll:function(scroll){this._super(...arguments);const mainPosScrolled=(scroll>this.headerHeight+this.topGap);const reachPosScrolled=(scroll>this.scrolledPoint+this.topGap);if(this.fixedHeader!==mainPosScrolled){this.$el.css('transform',mainPosScrolled?'translate(0, -100%)':'');void this.$el[0].offsetWidth;this._toggleFixedHeader(mainPosScrolled);} if(this.fixedHeaderShow!==reachPosScrolled){this.$el.css('transform',reachPosScrolled?`translate(0, -${this.topGap}px)`:'translate(0, -100%)');this.fixedHeaderShow=reachPosScrolled;this._adaptToHeaderChange();}},});publicWidget.registry.FixedHeader=BaseAnimatedHeader.extend({selector:'header.o_header_fixed',_updateHeaderOnScroll:function(scroll){this._super(...arguments);if(scroll>(this.scrolledPoint+this.topGap)){if(!this.$el.hasClass('o_header_affixed')){this.$el.css('transform',`translate(0, -${this.topGap}px)`);void this.$el[0].offsetWidth;this._toggleFixedHeader(true);}}else{this._toggleFixedHeader(false);void this.$el[0].offsetWidth;this.$el.css('transform','');}},});const BaseDisappearingHeader=publicWidget.registry.FixedHeader.extend({init:function(){this._super(...arguments);this.scrollingDownwards=true;this.hiddenHeader=false;this.position=0;this.atTop=true;this.checkPoint=0;this.scrollOffsetLimit=200;},destroy:function(){this._showHeader();this._super.apply(this,arguments);},_hideHeader:function(){this.$el.trigger('odoo-transitionstart');},_isShown(){return!this.fixedHeader||!this.hiddenHeader;},_showHeader:function(){this.$el.trigger('odoo-transitionstart');},_updateHeaderOnScroll:function(scroll){this._super(...arguments);const scrollingDownwards=(scroll>this.position);const atTop=(scroll<=0);if(scrollingDownwards!==this.scrollingDownwards){this.checkPoint=scroll;} this.scrollingDownwards=scrollingDownwards;this.position=scroll;this.atTop=atTop;if(scrollingDownwards){if(!this.hiddenHeader&&scroll-this.checkPoint>(this.scrollOffsetLimit+this.topGap)){this.hiddenHeader=true;this._hideHeader();}}else{if(this.hiddenHeader&&scroll-this.checkPoint<-(this.scrollOffsetLimit+this.topGap)/2){this.hiddenHeader=false;this._showHeader();}} if(atTop&&!this.atTop){this._showHeader();}},});publicWidget.registry.DisappearingHeader=BaseDisappearingHeader.extend({selector:'header.o_header_disappears',_hideHeader:function(){this._super(...arguments);this.$el.css('transform','translate(0, -100%)');},_showHeader:function(){this._super(...arguments);this.$el.css('transform',this.atTop?'':`translate(0, -${this.topGap}px)`);},});publicWidget.registry.FadeOutHeader=BaseDisappearingHeader.extend({selector:'header.o_header_fade_out',_hideHeader:function(){this._super(...arguments);this.$el.stop(false,true).fadeOut();},_showHeader:function(){this._super(...arguments);this.$el.css('transform',this.atTop?'':`translate(0, -${this.topGap}px)`);this.$el.stop(false,true).fadeIn();},});publicWidget.registry.autohideMenu=publicWidget.Widget.extend({selector:'header#top',disabledInEditableMode:false,async start(){await this._super(...arguments);this.$topMenu=this.$('#top_menu');this.noAutohide=this.$el.is('.o_no_autohide_menu');if(!this.noAutohide){await wUtils.onceAllImagesLoaded(this.$('.navbar'),this.$('.o_mega_menu, .o_offcanvas_logo_container, .dropdown-menu .o_lang_flag'));var $window=$(window);$window.on('load.autohideMenu',function(){$window.trigger('resize');});dom.initAutoMoreMenu(this.$topMenu,{unfoldable:'.divider, .divider ~ li, .o_no_autohide_item'});} this.$topMenu.removeClass('o_menu_loading');this.$topMenu.trigger('menu_loaded');},destroy(){this._super(...arguments);if(!this.noAutohide&&this.$topMenu){$(window).off('.autohideMenu');dom.destroyAutoMoreMenu(this.$topMenu);}},});publicWidget.registry.menuDirection=publicWidget.Widget.extend({selector:'header .navbar .nav',disabledInEditableMode:false,events:{'show.bs.dropdown':'_onDropdownShow',},start:function(){this.defaultAlignment=this.$el.is('.ml-auto, .ml-auto ~ *')?'right':'left';return this._super.apply(this,arguments);},_checkOpening:function(alignment,liOffset,liWidth,menuWidth,pageWidth){if(alignment==='left'){return(liOffset+menuWidth<=pageWidth);}else{return(liOffset+liWidth-menuWidth>=0);}},_onDropdownShow:function(ev){var $li=$(ev.target);var $menu=$li.children('.dropdown-menu');var liOffset=$li.offset().left;var liWidth=$li.outerWidth();var menuWidth=$menu.outerWidth();var pageWidth=$('#wrapwrap').outerWidth();$menu.removeClass('dropdown-menu-left dropdown-menu-right');var alignment=this.defaultAlignment;if($li.nextAll(':visible').length===0){alignment='right';} for(var i=0;i<2;i++){if(!this._checkOpening(alignment,liOffset,liWidth,menuWidth,pageWidth)){alignment=(alignment==='left'?'right':'left');}} $menu.addClass('dropdown-menu-'+alignment);},});publicWidget.registry.hoverableDropdown=animations.Animation.extend({selector:'header.o_hoverable_dropdown',disabledInEditableMode:false,effects:[{startEvents:'resize',update:'_dropdownHover',}],events:{'mouseenter .dropdown':'_onMouseEnter','mouseleave .dropdown':'_onMouseLeave',},start:function(){this.$dropdownMenus=this.$el.find('.dropdown-menu');this.$dropdownToggles=this.$el.find('.dropdown-toggle');this._dropdownHover();return this._super.apply(this,arguments);},_dropdownHover:function(){if(config.device.size_class>config.device.SIZES.SM){this.$dropdownMenus.css('margin-top','0');this.$dropdownMenus.css('top','unset');}else{this.$dropdownMenus.css('margin-top','');this.$dropdownMenus.css('top','');}},_onMouseEnter:function(ev){if(config.device.size_class<=config.device.SIZES.SM){return;} const $dropdown=$(ev.currentTarget);$dropdown.addClass('show');$dropdown.find(this.$dropdownToggles).attr('aria-expanded','true');$dropdown.find(this.$dropdownMenus).addClass('show');},_onMouseLeave:function(ev){if(config.device.size_class<=config.device.SIZES.SM){return;} const $dropdown=$(ev.currentTarget);$dropdown.removeClass('show');$dropdown.find(this.$dropdownToggles).attr('aria-expanded','false');$dropdown.find(this.$dropdownMenus).removeClass('show');},});publicWidget.registry.HeaderMainCollapse=publicWidget.Widget.extend({selector:'header#top',events:{'show.bs.collapse #top_menu_collapse':'_onCollapseShow','hidden.bs.collapse #top_menu_collapse':'_onCollapseHidden',},_onCollapseShow(){this.el.classList.add('o_top_menu_collapse_shown');},_onCollapseHidden(){this.el.classList.remove('o_top_menu_collapse_shown');},});return{extraMenuUpdateCallbacks:extraMenuUpdateCallbacks,};});; /* /website/static/src/js/content/snippets.animation.js defined in bundle 'web.assets_frontend_lazy' */ odoo.define('website.content.snippets.animation',function(require){'use strict';var Class=require('web.Class');var config=require('web.config');var core=require('web.core');const dom=require('web.dom');var mixins=require('web.mixins');var publicWidget=require('web.public.widget');var utils=require('web.utils');var qweb=core.qweb;window.requestAnimationFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame;window.cancelAnimationFrame=window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||window.msCancelAnimationFrame||window.oCancelAnimationFrame;if(!window.performance||!window.performance.now){window.performance={now:function(){return Date.now();}};} publicWidget.Widget.include({disabledInEditableMode:true,edit_events:null,read_events:null,init:function(parent,options){this._super.apply(this,arguments);this.editableMode=this.options.editableMode||false;var extraEvents=this.editableMode?this.edit_events:this.read_events;if(extraEvents){this.events=_.extend({},this.events||{},extraEvents);}},});var AnimationEffect=Class.extend(mixins.ParentedMixin,{init:function(parent,updateCallback,startEvents,$startTarget,options){mixins.ParentedMixin.init.call(this);this.setParent(parent);options=options||{};this._minFrameTime=1000/(options.maxFPS||100);this._updateCallback=updateCallback;this.startEvents=startEvents||'scroll';const mainScrollingElement=$().getScrollingElement()[0];const mainScrollingTarget=mainScrollingElement===document.documentElement?window:mainScrollingElement;this.$startTarget=$($startTarget?$startTarget:this.startEvents==='scroll'?mainScrollingTarget:window);if(options.getStateCallback){this._getStateCallback=options.getStateCallback;}else if(this.startEvents==='scroll'&&this.$startTarget[0]===mainScrollingTarget){const $scrollable=this.$startTarget;this._getStateCallback=function(){return $scrollable.scrollTop();};}else if(this.startEvents==='resize'&&this.$startTarget[0]===window){this._getStateCallback=function(){return{width:window.innerWidth,height:window.innerHeight,};};}else{this._getStateCallback=function(){return undefined;};} this.endEvents=options.endEvents||false;this.$endTarget=options.$endTarget?$(options.$endTarget):this.$startTarget;this._updateCallback=this._updateCallback.bind(parent);this._getStateCallback=this._getStateCallback.bind(parent);this._uid='_animationEffect'+_.uniqueId();this.startEvents=_processEvents(this.startEvents,this._uid);if(this.endEvents){this.endEvents=_processEvents(this.endEvents,this._uid);} function _processEvents(events,namespace){events=events.split(' ');return _.each(events,function(e,index){events[index]+=('.'+namespace);}).join(' ');}},destroy:function(){mixins.ParentedMixin.destroy.call(this);this.stop();},start:function(){this._paused=false;this._rafID=window.requestAnimationFrame((function(t){this._update(t);this._paused=true;}).bind(this));if(this.endEvents){this.$startTarget.on(this.startEvents,(function(e){if(this._paused){_.defer(this.play.bind(this,e));}}).bind(this));this.$endTarget.on(this.endEvents,(function(){if(!this._paused){_.defer(this.pause.bind(this));}}).bind(this));}else{var pauseTimer=null;this.$startTarget.on(this.startEvents,_.throttle((function(e){this.play(e);clearTimeout(pauseTimer);pauseTimer=_.delay((function(){this.pause();pauseTimer=null;}).bind(this),2000);}).bind(this),250,{trailing:false}));}},stop:function(){this.$startTarget.off(this.startEvents);if(this.endEvents){this.$endTarget.off(this.endEvents);} this.pause();},play:function(e){this._newEvent=e;if(!this._paused){return;} this._paused=false;this._rafID=window.requestAnimationFrame(this._update.bind(this));this._lastUpdateTimestamp=undefined;},pause:function(){if(this._paused){return;} this._paused=true;window.cancelAnimationFrame(this._rafID);this._lastUpdateTimestamp=undefined;},_update:function(timestamp){if(this._paused){return;} this._rafID=window.requestAnimationFrame(this._update.bind(this));var elapsedTime=0;if(this._lastUpdateTimestamp){elapsedTime=timestamp-this._lastUpdateTimestamp;if(elapsedTimethis._computeHeights());this._computeHeights();this.$target.carousel(this.editableMode?'pause':undefined);$(window).on('resize.slider',_.debounce(()=>this._computeHeights(),250));return this._super.apply(this,arguments);},destroy:function(){this._super.apply(this,arguments);this.$('img').off('.slider');this.$target.carousel('pause');this.$target.removeData('bs.carousel');_.each(this.$('.carousel-item'),function(el){$(el).css('min-height','');});$(window).off('.slider');},_computeHeights:function(){var maxHeight=0;var $items=this.$('.carousel-item');$items.css('min-height','');_.each($items,function(el){var $item=$(el);var isActive=$item.hasClass('active');$item.addClass('active');var height=$item.outerHeight();if(height>maxHeight){maxHeight=height;} $item.toggleClass('active',isActive);});$items.css('min-height',maxHeight);},_onContentChanged:function(ev){this._computeHeights();},});registry.Parallax=Animation.extend({selector:'.parallax',disabledInEditableMode:false,effects:[{startEvents:'scroll',update:'_onWindowScroll',}],start:function(){this._rebuild();$(window).on('resize.animation_parallax',_.debounce(this._rebuild.bind(this),500));return this._super.apply(this,arguments);},destroy:function(){this._super.apply(this,arguments);$(window).off('.animation_parallax');},_rebuild:function(){this.$bg=this.$('> .s_parallax_bg');this.speed=parseFloat(this.$target.attr('data-scroll-background-ratio')||0);var noParallaxSpeed=(this.speed===0||this.speed===1);if(noParallaxSpeed){this.$bg.css({transform:'',top:'',bottom:'',});return;} this.viewport=document.body.clientHeight-$('#wrapwrap').position().top;this.visibleArea=[this.$target.offset().top];this.visibleArea.push(this.visibleArea[0]+this.$target.innerHeight()+this.viewport);this.ratio=this.speed*(this.viewport/10);const absoluteRatio=Math.abs(this.ratio);this.$bg.css({top:-absoluteRatio,bottom:-absoluteRatio,});},_onWindowScroll:function(scrollOffset){if(this.speed===0||this.speed===1){return;} var vpEndOffset=scrollOffset+this.viewport;if(vpEndOffset>=this.visibleArea[0]&&vpEndOffset<=this.visibleArea[1]){this.$bg.css('transform','translateY('+_getNormalizedPosition.call(this,vpEndOffset)+'px)');} function _getNormalizedPosition(pos){var r=(pos-this.visibleArea[1])/(this.visibleArea[0]-this.visibleArea[1]);return Math.round(this.ratio*(2*r-1));}},});registry.mediaVideo=publicWidget.Widget.extend({selector:'.media_iframe_video',start:function(){var def=this._super.apply(this,arguments);if(this.$target.children('iframe').length){return def;} this.$target.empty();this.$target.append('
     
    '+'
     
    ');this.$target.append($('